پيوند جدول ها :
تا اين قسمت تمام مثال ها و مسئله هايی که در SQL به آنها پاسخ داديم ، مسئله هايی بودند که اطلاعات ما فقط از يک جدول استخراج می شد . اما در برنامه نويسی واقعی پايگاه داده ها ، ما مجبور هستيم که اطلاعات خود را از بيش از يک جدول استخراج کنيم . در اين حالت ما ابتدا بايد جدول هايی که می خواهيم اطلاعات را از آنها استخراج کنيم ، با هم پيوند دهيم . هدف از ايجاد اين ارتباط تلفيق اطلاعات در جدول ها و چاپ اطلاعات مورد نظر در خروجی است .
مفاهيم اوليه :
برای پيوند دادن جدول ها ابتدا بايد چند مفهوم زير را بشناسيم :
- کليد اصلی : فيلد کليد اصلی در يک جدول ، فيلدی است که شرايط زير را داشته باشد :
- مقدار آن برای هر نمونه رکورد ( سطر ) منحصر به فرد و غير تکراری باشد . به عبارت ديگر هيچ 2 رکوردی در يک جدول در اين فيلد مقدار يکسان نداشته باشد . کليد اصلی وجه تمايز 2 نمونه رکورد مختلف در يک جدول است .
- طول مقادير آن حدامکان کوتاه باشد .
نکته : يک جدول می تواند بيش از يک کليد اصلی داشته باشد .
مثال : فيلد شماره دانشجويی در جدول Student کليد اصلی است . هيچ دو دانشجويی نمی توانند دارای شماره دانشجويی يکسان باشند .
- کليد خارجی : کليد خارجی ، فيلدی است که در يک جدول کليد اصلی و در جدول ديگر به تنهايی کليد اصلی نباشد . از کليد خارجی برای ارتباط يک به چند 2 جدول با هم استفاده می شود .
شرط ارتباط 2 جدول :
برای ارتباط بين جدول ها بايد شرط های زير برقرار باشد . بايد قبل از طراحی پايگاه داده و جدول های آن موارد زير را جهت ارتباط جدول های مورد نظر رعايت کرد .
- وجود فيلد مشترک دقيقا از يک نوع و يک سايز .
- فيلد مشترک در يکی از جدول ها کليد اصلی و در جدول ديگر کليد خارجی باشد .
معرفی 2 جدول ديگر :
از اين به بعد ما در مثال های خود از 2 جدول ديگر به غير از جدول Student ، به نام های Courses ( درس ها ) و Selection ( انتخاب واحد ) به شرح زير استفاده می کنيم :
کد درس
( کليد اصلی ) |
عنوان درس |
تعداد واحد |
نوع درس |
شماره دانشجويی
( کليد اصلی خارجی ) |
کد درس
( کليد اصلی خارجی ) |
ترم تحصيلی |
سال تحصيلی |
نمره |
نکته مهم : در تمام مثال های قبلی ، ما در دستور Select فقط نام ستون ها را به تنهايی ذکر می کرديم ، زيرا در آن زمان ، اطلاعات ما فقط از يک جدول استخراج می شد . اما در هنگام پيوند دو جدول و استفاده از چند جدول در دستور Select بايد نام ستون را به همراه نام جدول مربوط به آن ذکر کرد . اين کار 2 دليل اصلی دارد :
- باعث تمايز ستون های مشترک در جدول ها از هم می شود و مشخص می کند که هر ستون مربوط به کدام جدول است .
- باعث خوانايی و دقت بيشتر برنامه می شود .
شکل کلی اين دستور به صورت زير است :
نام ستون . نام جدول
مثال : انتخاب ستون StudedntID از جدول Student :
Student.StudentID
مثال های پيوند جدول ها :
در اين قسمت با ارائه چندين مثال ، انواع حالت های مختلف پيوند جدول ها را بررسی می کنيم . از داده های موجود در جداول زير برای مثال ها استفاده می کنيم :
توجه : جدول انتخاب واحد نشان دهنده اين است که هر دانشجو چه واحدهای درسی را در چه ترم و سال و با چه نمره ای گذارنده است .
41252214 |
Ahmad |
Rezaee |
Hard Ware |
Tehran |
18 |
10724113 |
Ehsan |
Amiri |
Soft Ware |
Karaj |
14 |
10254861 |
Zahra |
Hosini |
Hard Ware |
Tehran |
17 |
27365187 |
Sahar |
Ahmadi |
Soft Ware |
Bam |
16 |
35654415 |
Hesam |
Razavi |
Soft Ware |
Tehran |
19 |
1011 |
پايگاه داده |
3 |
عملی |
1012 |
مباحث ويژه |
3 |
عملی |
1013 |
زبان تخصصی |
2 |
نطری |
41252214 |
1011 |
2 |
85 - 86 |
16 |
10724113 |
1011 |
2 |
85 - 86 |
14 |
41252214 |
1012 |
1 |
85 - 86 |
17 |
10724113 |
1012 |
1 |
85 - 86 |
11 |
10254861 |
1013 |
2 |
85 - 86 |
13 |
10254861 |
1011 |
2 |
84 - 85 |
8 |
27365187 |
1012 |
1 |
84 - 85 |
19 |
27365187 |
1013 |
1 |
84 - 85 |
16 |
35654415 |
1011 |
2 |
84 - 85 |
9 |
35654415 |
1013 |
2 |
84 - 85 |
17 |
شکل کلی پيوند 2 جدول برای استخراج اطلاعات به صورت زير است :
Select نام ستون های مورد نظر برای نمايش
From نام جدول ها
where برابر قرار دادن فيلدهای مشترک 2 جدول
And بقيه شرط های مورد نظر ;
در اين حالت ابتدا در دستور Select نام ستون هايی که از 2 جدول می خواهيم نمايش دهيم را تعيين می کنيم . سپس نام 2 جدول را در مقابل دستور From نوشته و در اولين شرط دستور Where نام فيلد مشترک را از هر 2 جدول نوشته و آنها را برابر هم قرار می دهيم . اين شرط ، شرط برقراری پيوند و تلفيق اطلاعات 2 جدول است . در ادامه هم می توان شرط های ديگری را برای استخراج اطلاعات تعيين کرد . در مثال های زير اين مسئله را بررسی می کنيم :
مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند :
Select Students.Name , Students.Family , Selection.Term , Selection.Year
From Students , Selection
where Student.Student ID = Selection.Stuedent ID
AND Course ID = 1012 AND Term = 1 AND Year = '85 - 86'
Order By Students.Family; |
Ehsan |
Amiri |
1 |
85 - 86 |
Ahmad |
Rezaee |
1 |
85 - 86 |
|
مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويی 10254861 انتخاب کرده است :
Select Courses.Course ID , Courses.Co Title
from Courses , selection
Where Courses.Course ID = selection.Course ID
AND Selection.Student ID = 102548861 ; |
1011 |
پايگاه داده |
1013 |
زبان تخصصی |
|
مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که درس با کد 1013 در سال تحصيلی 84 - 85 را با نمره بالاتر از 15 گذارنده اند :
SELECT Students.Name , Students.Family
From Students , Selection
Where Students.Studentid = Selection.Studentid
And Selection.Courseid = '1013' And Year = '84 - 85' And Grade > 15 ; |
Sahar |
Ahamdi |
Hesam |
Razavi |
|
پيوند بيش از 2 جدول به هم :
گاهی اوقات لازم است که اطلاعات مورد نياز ما از 3 جدول يا بيشتر استخراج شود . در اين حالت بايد کليه جدول ها را به هم پيوند دهيم به اين صورت که معمولا از يک جدول سوم برای پيوند 2 جدول ديگر استفاده می شود و 2 به 2 جدول هايی که با هم فيلد مشترک دارند را با ذکر شرط پيوند در دستور Where به هم پيوند می دهيم . سپس بقيه شروط دلخواه را نيز ذکر می کنيم .
شکل کلی اين حالت به صورت زير است :
Select نام ستون های مورد نظر از جدول ها
From نام تمام جدول ها
Where برابر قرار دادن فيلد مشترک جدول های 1 و 2
AND برابر قرار دادن فيلدهای مشترک جدول های 2 و 3
AND ... ;
مثال : نام و نام خانوادگی دانشجويانی را بدهيد که حداقل يک درس از نوع نظری را انتخاب کرده باشند :
Select Students.Name , Students.Family , Courses.CoTitle , Courses.CoType
From Students , Courses , Selections
Where Student.StudentID = Selection.StudentID
AND Courses.CourseID = Selection.CourseID
AND Courses.CoType = ' نظری ' ; |
Zahra |
Hosini |
زبان تخصصی |
نظری |
Sahar |
Ahamadi |
زبان تخصصی |
نظری |
Hesam |
Razavi |
زبان تخصصی |
نظری |
|
|
امتیاز مطلب : 10
|
تعداد امتیازدهندگان : 4
|
مجموع امتیاز : 4